import router from '@/router';
import axios from 'axios';
import { Base64 } from 'js-base64';
import store from '@/store';
import { Message } from 'element-ui';
import { Loading } from 'element-ui';
// 设置请求超时时间和域名  创建axios实例
let clientId = 'saber';// 客户端id
let clientSecret = 'saber_secret'; // 客户端密钥
let baseURL = process.env.VUE_APP_BASE_API;
let subBaseURL = "/api"
const instance = axios.create({
  baseURL: baseURL + subBaseURL,
  timeout: 5000
})
//  http request 拦截器
let loadingInstance;
instance.interceptors.request.use(
  config => {
    loadingInstance = Loading.service({
      lock: true,
      text:'正在加载中',
      background:'rgba(0,0,0,.5)'
    });
    config.headers['Content-Type'] = 'application/json';
    config.headers['Authorization'] = `Basic ${Base64.encode(`${clientId}:${clientSecret}`)}`;
    config.headers['Tenant-Id'] = '000000';
    config.headers['Blade-Auth'] = store.state.user.info.access_token || "";
    config.headers['Captcha-Code'] = store.state.user.code || "";
    config.headers['Captcha-Key'] = store.state.user.key || "";
    return config
  }, err => {
    loadingInstance.close();
    return Promise.reject(err)
  }
)

//  响应拦截器即异常处理
instance.interceptors.response.use(response => {
  loadingInstance.close();
  return response
}, err => {
  loadingInstance.close();
  if (err && err.response) {
    switch (err.response.status) {
      case 400:
        console.log('错误请求')
        break
      case 401:
        store.commit('/user/setInfo',{})
        router.push('/login');
        break
      case 403:
        console.log('拒绝访问')
        break
      case 404:
        console.log('请求错误,未找到该资源')
        break
      case 405:
        console.log('请求方法未允许')
        break
      case 408:
        console.log('请求超时')
        break
      case 500:
        console.log('服务器端出错')
        break
      case 501:
        console.log('网络未实现')
        break
      case 502:
        console.log('网络错误')
        break
      case 503:
        console.log('服务不可用')
        break
      case 504:
        console.log('网络超时')
        break
      case 505:
        console.log('http版本不支持该请求')
        break
      default:
        console.log(`连接错误${err.response.status}`)
    }
  } else {
    Message.error("连接到服务器失败")
  }
  return Promise.resolve(err.response)
})
/**
* 封装get方法
* @param url
* @param data
* @returns {Promise}
*/

function get(url, params = {}) {
  return new Promise((resolve, reject) => {
    instance.get(url, {
      params: params
    })
      .then(response => {
        resolve(response.data)
      })
      .catch(err => {
        reject(err)
      })
  })

}

/**

* 封装post请求

* @param url

* @param data

* @returns {Promise}

*/

function post(url, data = {}) {
  return new Promise((resolve, reject) => {
    instance.post(url, data)
      .then(response => {
        resolve(response.data)
      }, err => {
        reject(err)
      })
  })
}

/**

* 封装patch请求

* @param url

* @param data

* @returns {Promise}

*/

function patch(url, data = {}) {
  return new Promise((resolve, reject) => {
    instance.patch(url, data)
      .then(response => {
        resolve(response.data)
      }, err => {
        reject(err)
      })
  })

}

/**

* 封装put请求

* @param url

* @param data

* @returns {Promise}

*/

// function put(url, data = {}) {
//   return new Promise((resolve, reject) => {
//     instance.put(url, data)
//       .then(response => {
//         resolve(response.data)
//       }, err => {
//         reject(err)
//       })
//   })
// }
/**

* 封装delete请求

* @param url

* @param data

* @returns {Promise}

*/
//  function del(url,params){
//   return new Promise((resolve,reject)=>{
//     instance.delete(url,params).then(response=>{  //这里传递的参数不做处理
//              resolve(response.data);
//        },err=>{
//              reject(err);
//        }).catch((error)=>{
//              reject(error);
//        })
//   })
// }

//  开放接口

export default {
  get: get,
  post: post,
  // put: put,
  // patch: patch,
  // del:del
}